#登陆和退出、查询余额、取钱，存钱等操作
#---------------自动取款机管理系统---------------
# 1 登录管理系统
# 2 查询余额
# 3 存钱
# 4 取钱
# 5 退出管理系统
# 6 系统显示界面与人机交互
#---------------自动取款机管理系统---------------

#定义列表的目的：用来暂时存储当前用户登录的信息
user_list = []
#manager_list = []

usr_data = [
    {'user': 'a123', 'password': '123', 'money': '10000.00'},
    {'user': 'b123', 'password': '123', 'money': '58000.00'},
    {'user': 'c123', 'password': '123', 'money': '3000.00'},
    {'user': 'd123', 'password': '123', 'money': '0.00'},
]
# 1 登录
def login_user():
    '''
    判断登陆信息是否存在用户数据中，并临时记录在user_list中
    区别于后面可能有的管理员登录login_manager()
    :return:
    '''
    # 声明user_list是全局变量，方便登陆函数添加当前登陆用户的信息给其他函数用
    global user_list
    # 等待用户输入自己的账号密码
    key_u = input('请输入用户名：')
    key_p = input('请输入密码：')
    # 用遍历和枚举得到一个索引序列，数据下标
    for i, user_dict in enumerate(user_list):
        # 判断用户输入的信息是否存在

        if user_dict['user'] == key_u and user_dict['password'] == key_p:
            # 当用户的信息存在后，把索引和user存到user_list列表中
            user_list.append(user_dict)
            print(type(user_list))
            print(user_list)
    # 判断列表是不是为空
    if user_list != []:
        # 不为空是，代表用户输入的用户存在，则提示登陆成功
        print('{:^76}'.format('------登陆成功------\n'))#符号^表示format中的内容居中显示
    # 否则就是没有找到用户的数据，代表密码或账户错误
    else:
        # 提示用户需不需要重新输入，输入y重新引用本函数，否则结束本函数
        if input('您输入的账户不存在或者密码有误，是否重新输入？y/n') == 'y':
            login_user()

# 2 存钱
def save_money():
    '''
    :return:
    '''
    # 当用户输入的不是整数，报错并返回重新调用本函数，报错时使用return组织程序继续往下运行
    key_sm = float(input('请输入您要存款的金额：'))
    # is_integer()判断一个浮点是否为整数，小数为FALSE
    if key_sm.is_integer() == False:
        print('只能输入整数！！！')
        save_money()
    else:
        # 把用户输入的整数加到用户数据中，用户数据的定位也来自登入提供的临时列表
        user_list[0]['money'] += key_sm
        print('='*55)
        # 使用format占位
        print(' '*55,'您已成功存款{:^8}元!'.format(key_sm))
        print('='*55)

# 3 取钱
def draw_money():
    '''
    :return:
    '''
    # 当用户输入的不是整数，报错并返回重新调用本函数，报错时使用return组织程序继续往下运行
    key_dm = float(input('请输入您要取款的金额：'))
    # 判断输入的是否为整数，整数返回True
    if key_dm.is_integer() == False:
        print('只能输入整数！！！')
        draw_money()
    # 判断余额是否大于取款金额，当账户余额充足，执行取款
    if user_list[0]['money'] >= key_dm:
        user_list[0]['money'] -= key_dm
        print('=' * 78)
        print(' '*28,'您已成功取款{:^8}元!'.format(key_dm))
        print('=' * 78)
    else:    #当用户余额不足是，告知，并结束本函数
        print('=' * 78)
        print('{:^78}'.format('余额不足!!!'))
        print('=' * 78)
        head()

# 4 余额
def show_money():
    '''
    查询用户的余额
    :return:
    '''
    print('=' * 78)
    # 通过登入函数中临时保存的列表中的索引，就可以找出当前用户的余额信息
    print(' '*26,'您的账户余额为{:^8}元!'.format(user_list[0]['money']))
    print('=' * 78)

# 5 退出
def logout_user():
    '''
    登出，也是退出的函数，后期韩式可扩展成退出时保存用户操作的信息到数据库
    :return:
    '''
    print('='*78)
    user_list.clear()
    print('='*30,'感谢使用，再见！！！','='*29)
    print('=' * 78)


def show_user():
    print('=-='*40)
    print('{:^45}'.format('1.登录        2.存钱'))
    print('{:^45}'.format('3.取钱        4.余额'))
    print('{:^45}'.format('5.退出             '))
    print('= - ' * 40)
    key_user = input('请输入一个对应的选择')
    if key == '1':
        login_user()
        input('按回车键继续：')
    elif key == '2':
        save_money()
        input('按回车键继续：')
    elif key == '3':
        draw_money()
        input('按回车键继续：')
    elif key == '4':
        show_money()
        input('按回车键继续：')
    elif key == '5':
        logout_user()
        input('按回车键继续：')
    else:
        print('=' * 12, '操作无效', '=' * 12, )

# # 2_1 添加用户信息
# def  add_user(account,password,money):
#     user_dict = {}
#     user_dict['account'] = account
#     user_dict['password'] = password
#     user_dict['money'] = money
#     user_list.append(user_dict)
# # 2_2 查看用户信息
# def show_user_info():
#     '''
#     #适用于系统管理员的查看用户所有信息
#     :return:
#     '''
#     if len(user_list) == 0:
#         print('='*20,'没有用户信息','='*20)
#         return
#     print('|{0:<5}|{1:<10}|{2:<5}|{3:<10}|'.format('user_id','account','password','money'))
#     #{0:<5}表示第一个站位（{}表示站位）中的数据长度为5,"<"表示想做对齐
#     print('-'*40)
#     for i, user_dict in enumerate(user_list):
#         print('|{0:<5}|{1:<10}|{2:<5}|{3:<10}|'.format(i+1,user_dict['user_id'],user_dict['account'],user_dict['password'],user_dict['money']))
#
# # 2_3 删除用户信息
# def del_user(user_id):
#     user_id_int = int(user_id)
#     user_list.pop(user_id_int-1) #user_id的序号是从1开始的，而列表中的下标从0开始

# 5 退出
def logout_user():
    pass
    #print('再见')

#  人机交互界面:
    '''
    1 主界面（初始登录）
    2 用户操作界面
    3 管理员操作界面
    '''
while True:
    #输出一个初始登录界面
    print('='*18,'自动取款机管理系统','='*18)
    # print('{:^45}'.format('1.登录        2.存钱'))
    # print('{:^45}'.format('3.取钱        4.余额'))
    # print('{:^45}'.format('5.退出             '))
    print('{:<15}'.format('1.用户登录             '))
    print('{:<15}'.format('2.退出                '))
    #print('{:<15}'.format('#.管理员登录             '))
    print('='*55)
    key = input('请输入一个对应的选择')
    if key == '1':
        login_user()
        input('按回车键继续：')
    elif key == '#':
        login_manager()
        input('按回车键继续：')
    else:
        print('=' * 12, '操作无效','=' * 12)




# # 测试 2 查看学员信息
# show_stu_info()
#
# #测试 3 添加学员信息
# # add_stu('bb','35','classid')
# show_stu_info()
# del_stu(3)
# show_stu_info()
